

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.Serializable;

/**
 * Created by admin on 2020/6/27.
 */
public class MainFrame extends JFrame implements ActionListener, Serializable {

    public static void main(String[] args) {
        MainFrame mainFrame = new MainFrame();
    }

    private static final long serialVersionUID = 6126254268960773408L;
    private TextArea textArea;
    private JButton btnOK;
    private JButton btnCancel;
    private JMenuItem miOpen;
    private JMenuItem miExit;


    public MainFrame() {
        initFrame();
        this.setVisible(true);
    }

    /**
     * 初始化布局
     */
    private void initFrame() {
        // 标题
        this.setTitle("主窗口");
        // 边界
        this.setBounds(100, 100, 850, 700);
        // 绝对布局
        this.setLayout(null);
        Font font = new Font("微软雅黑", Font.PLAIN, 15);

        // 将文本域添加到滚动面板中
        textArea = new TextArea();
        textArea.setFont(font);

        // 滚动面板
        JScrollPane pane = new JScrollPane(textArea);
        pane.setBounds(0, 0, 800, 500);
        this.add(pane);

        btnOK = new JButton("保存");
        btnOK.setBounds(600, 510, 100, 50);
        btnOK.setFont(font);
        btnOK.addActionListener(this);
        this.add(btnOK);

        btnCancel = new JButton("取消");
        btnCancel.setBounds(710, 510, 100, 50);
        btnCancel.setFont(font);
        btnCancel.addActionListener(this);
        this.add(btnCancel);

        // 添加窗口事件处理程序，使用适配器
        this.addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
                System.exit(-1);
            }
        });

        // 添加菜单栏
        JMenuBar menuBar = new JMenuBar();
        // 添加菜单
        JMenu menu = new JMenu("文件");

        miOpen = new JMenuItem("打开");
        miOpen.addActionListener(this);
        // 添加菜单项
        menu.add(miOpen);

        //分隔符
        menu.addSeparator();

        miExit = new JMenuItem("推出");
        miExit.addActionListener(this);
        menu.add(miExit);

        menuBar.add(menu);
        this.setJMenuBar(menuBar);

    }

    public void actionPerformed(ActionEvent e) {
        Object es = e.getSource();
        // 保存文件
        if (es == btnOK) {
            try {
                // 打开保存对话框，定位保存文件的位置
                FileDialog d = new FileDialog(this, "保存", FileDialog.SAVE);
                d.setVisible(true);

                File f = new File(d.getDirectory(), d.getFile());

                String str = textArea.getText();
                FileWriter writer = new FileWriter(f);
                writer.write(str);
                writer.close();
                textArea.setText(null);

            } catch (Exception e1) {
                e1.printStackTrace();
            }

        } else if (es == btnCancel) {
            // 取消
            this.dispose();

        } else if (es == miOpen) {
            // 是否是菜单项
            FileDialog d = new FileDialog(this, "打开", FileDialog.LOAD);
            d.setVisible(true);
            String dir = d.getDirectory();
            String f = d.getFile();
            if (dir != null && f != null) {
                try {
                    textArea.setText(null);
                    FileReader reader = new FileReader(new File(dir, f));
                    char[] buffer = new char[1024];
                    int len = -1;
                    while ((len = reader.read(buffer)) != -1) {
                        textArea.setText(textArea.getText() + new String(buffer, 0, len));

                    }
                    reader.close();
                } catch (Exception e1) {
                    e1.printStackTrace();
                }
            }
        } else if (es == miExit) {
            // 退出
            System.exit(-1);
        }
    }
}